<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>数组去重</title>
</head>
<body>
  
  <script>
    // 1. 利用indexOf进行去重
    Array.prototype.unique1 = function () {
      let arr = []
      this.forEach( item => {
        if (arr.indexOf(item) === -1) {
          arr.push(item)
        }
      })

      return arr;
    }

    // 2. 通过空间换时间方法进行去重
    Array.prototype.unique2 = function () {
      let arr = [];
      let obj = {};
      this.forEach(item => {
        if (!obj.hasOwnProperty(item)) {
          obj[item] = true
          arr.push(item);
        }
      })

      return arr;
    }

    // 3. 利用 ES6 的语法进行去重(Array.from() 从一个类似数组或可迭代对象中创建一个新的，浅拷贝的数组实例)
    Array.prototype.unique3 = function () {
      return Array.from(new Set(this))
    }

    // 4. 利用 ... 运算符和set 进行去重
    Array.prototype.unique4 = function () {
      return [...new Set(this)]
    }

    let arr = [1, 2, 2, 3, 4, 3, 5, 6, 1];
    console.log(arr.unique1())
    console.log(arr.unique2())

    console.log(arr.unique3())
    console.log(arr.unique4())

  </script>
</body>
</html>